// #include <cstdlib>
// #include <algorithm>
// #include <iostream>
// #include <cmath>
// #include <cstring>
// 
// using namespace std;
// 
// typedef struct _TNode {
// 	int adjSize;
// 	int adj[100];
// 	int idx;
// } TNode;
// 
// bool operator < (const TNode& x, const TNode& y) {
// 	return x.adjSize < y.adjSize;
// }
// 
// int n, m;
// TNode nodes[100];
// 
// bool addIn[100];
// bool everVisit[100];
// bool visit[100];
// bool hasEdge[100][100];
// int color[100];
// int avaliable;
// 
// int curB, maxB;
// int maxColor[100];
// 
// 
// int searched = 0;
// int idxMapping[100];
// 
// int searchlist[100];
// int searchLen;
// 
// int countMess(int x) {
// 	if (visit[x]) return 0;
// 	visit[x] = true;
// 	int res = 0;
// 	for (int i=0; i<nodes[x].adjSize; ++i)
// 		if (color[nodes[x].adj[i]] == 0)
// 			res += countMess(idxMapping[nodes[x].adj[i]]);
// 	return res+1;
// }
// 
// void search2(int sx) {
// 	int x = searchlist[sx];
// 	int restAval = 0;
// 	
// 	for (int i=sx; i<searchLen; ++i)
// 		if (color[nodes[searchlist[i]].idx] == 0)
// 			visit[searchlist[i]] = false;
// 
// 	for (int i=sx; i<searchLen; ++i)
// 		if (color[nodes[searchlist[i]].idx] == 0) {
// 			restAval += ceil(0.7*countMess(searchlist[i]));
// 		}
// 
// 	if (curB + restAval <= maxB) return;
// // 	if (curB + searchLen-sx <= maxB) return;
// 	++searched;
// 	if (sx==searchLen) {
// 		if (curB > maxB) {
// 			maxB = curB;
// 			cout << "maxB: " << maxB << endl;
// 			for (int i=0; i<searchLen; ++i)
// 				maxColor[nodes[searchlist[i]].idx] = color[nodes[searchlist[i]].idx];
// 		}
// 		return;
// 	}
// 	everVisit[x] = true;
// 	bool onlyW = false;
// 	if (color[nodes[x].idx] == 0) {
// 		for (int i=0; i<nodes[x].adjSize; ++i) {
// 			int adj = idxMapping[nodes[x].adj[i]];
// 			if (color[nodes[x].adj[i]] == 'b') {
// 				onlyW = true;
// 				break;
// 			}
// 		}
// 		if (!onlyW) {
// 			color[nodes[x].idx] = 'b';
// 			++curB;
// 			int bakColor[100], bakIdx=0;
// 			for (int i=0; i<nodes[x].adjSize; ++i)
// 				if (color[nodes[x].adj[i]] == 0) {
// 					color[nodes[x].adj[i]] = 'w';
// 					bakColor[bakIdx++] = nodes[x].adj[i];
// 				}
// 				search2(sx+1);
// 				for (int i=0; i<bakIdx; ++i)
// 					color[bakColor[i]] = 0;
// 			--curB;
// // 			cout << "turn b to w: " << nodes[x].idx +1<< endl;
// 		}
// 
// 		color[nodes[x].idx] = 'w';
// 		search2(sx+1);
// 		color[nodes[x].idx] = 0;
// 	}
// 	else {
// 		search2(sx+1);
// 	}
// }
// 
// void findTotalNode(int x) {
// 	if (visit[x]) return;
// 	searchlist[searchLen++] = x;
// 	visit[x] = true;
// 	for (int i=0; i<nodes[x].adjSize; ++i)
// 		findTotalNode(idxMapping[nodes[x].adj[i]]);
// }
// 
// int main(void)
// {
// 	int totTestcase;
// 	cin >> totTestcase;
// 	for (int testcase = 0; testcase < totTestcase; ++testcase) {
// 		cin >> n >> m;
// 		for (int i=0; i<100; ++i) {
// 			nodes[i].adjSize = 0;
// 			nodes[i].idx = i;
// 		}
// 		memset(hasEdge, 0, 100*100);
// 		for (int i=0; i<m; ++i) {
// 			int a, b;
// 			cin >> a >> b;
// 			--a;--b;
// 			if (hasEdge[a][b]) continue;
// 			nodes[a].adj[nodes[a].adjSize++] = b;
// 			nodes[b].adj[nodes[b].adjSize++] = a;
// 			hasEdge[a][b] = hasEdge[b][a] = true;
// 		}
// 
// 		sort(nodes, nodes+n);
// 		cout << "order: " << endl;
// 		for (int i=0; i<n; ++i)
// 			cout << nodes[i].idx+1 << " ";
// 		cout << endl;
// 		for (int i=0; i<n; ++i)
// 			idxMapping[nodes[i].idx] = i;
// 
// 		searched = 0;
// 		memset(everVisit, 0, 100);
// 		for (int i=0; i<n; ++i) {
// 			if (!everVisit[i]) {
// 				memset(visit, 0, 100);
// 				searchLen = 0;
// 				findTotalNode(i);
// 				sort(searchlist, searchlist+searchLen);
// 				maxB = 0;
// 				curB = 0;
// 				cout << i << " " << nodes[i].adjSize << " " << searchLen << endl;
// 				search2(0);
// 			}
// 		}
// 
// // 		cout << "searched node: " << searched << endl;
// 		if (testcase>0) cout << endl;
// 		maxB = 0;
// 		for (int i=0; i<n; ++i)
// 			if (maxColor[i] == 'b') ++maxB;
// 		cout << maxB << endl;
// 		bool firstBlood = true;
// 		for (int i=0; i<n; ++i)
// 			if (maxColor[i] == 'b') {
// 				if (firstBlood) {
// 					cout << (i+1);
// 					firstBlood = false;
// 				} else
// 					cout << " " << (i+1);
// 			}
// 	}
// 	return 0;
// }